/* ===================

AX2E (AXESCON XACML 2.0 Engine) is the Java authorization engine, which implements OASIS XACML 2.0 standard.
Copyright (C) 2007 AXESCON LLC

This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.

This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA


Contact: AXESCON LLC - info{at}axescon.com

 =================== */
package axescon.xacml.model.shared.attr;

import java.math.BigDecimal;


public class DayTimeDurationAttribute extends AbstractAttributeValue {
    public static final String dataType =
            "http://www.w3.org/TR/2002/WD-xquery-operators-20020816#" +
            "dayTimeDuration";

    public String getDataType() {
        return dataType;
    }

    private int sign = 1;

    private long days;

    private long hours;

    private long minutes;

    private long seconds;

    /**
     * fraction of a second
     */
    private BigDecimal fraction;

    public long getTimeInSeconds() {
        return sign * ((((((days * 24) + hours) * 60) + minutes) * 60) +
                seconds);
    }


    public DayTimeDurationAttribute(int sign, long days, long hours,
                                    long minutes, long seconds)
            throws IllegalArgumentException {

        this.sign = sign < 0 ? -1 : 1;
        this.days = days;
        this.hours = hours;
        this.minutes = minutes;
        this.seconds = seconds;
    }

    public long getDays() {
        return days;
    }

    public long getHours() {
        return hours;
    }

    public long getMinutes() {
        return minutes;
    }

    public long getSeconds() {
        return seconds;
    }

    public boolean equals(Object o) {
        if (!(o instanceof DayTimeDurationAttribute))
            return false;

        DayTimeDurationAttribute other = (DayTimeDurationAttribute) o;

        return ((getTimeInSeconds() == other.getTimeInSeconds()));
    }

    public int hashCode() {
        int hashCode = (int) getTimeInSeconds() ^ (int) (getTimeInSeconds() >> 32);
        return sign * hashCode;
    }

    public String toString() {
        StringBuffer sb = new StringBuffer();

        sb.append("DayTimeDurationAttribute: [\n");
        sb.append("  sign: " + sign);
        sb.append("  Days: " + days);
        sb.append("  Hours: " + hours);
        sb.append("  Minutes: " + minutes);
        sb.append("  Seconds: " + seconds);
        sb.append("  TotalSeconds: " + getTimeInSeconds());
        sb.append("]");

        return sb.toString();
    }

}
